package com.qf.controller;

import org.apache.commons.io.FilenameUtils;
import org.apache.commons.io.IOUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.util.UUID;

/**
 * 上传文件
 * @author lixu
 */
@RestController
@RequestMapping("/file")
public class UploadFileController {


    //上传文件
    @PostMapping("/upload")
    public String upload(MultipartFile file) throws Exception{
        System.out.println("file原始名:" + file.getOriginalFilename());// 0-4.jpg  .png
        System.out.println("file长度:" + file.getSize());
        System.out.println("file二进制:" + file.getBytes());
        System.out.println("file的流:" + file.getInputStream());
        System.out.println("file的名称:" + file.getName());// <input type="file" name="file"/> file

        //扩展名
        String ext = FilenameUtils.getExtension(file.getOriginalFilename());

        //transfer : 传送 TO：到
        file.transferTo(new File("D:\\temp\\" + UUID.randomUUID().toString() + "." + ext));
        //成功
        return "OK"; //  /WEB-INF/jsp/OK.jsp

    }
    /**
     * 下载
     * ?name=Koala.jpg
     */
    @GetMapping("/download")
    public void download(String name, HttpServletResponse response) throws Exception{
        //文件的路径   磁盘
        String path = "D:\\temp\\" + name;
        //设置响应头 让浏览器知道此输出流是为了下载用的  attachment:附件 下载
        response.setHeader("content-disposition","attachment;filename="+name);
        //参数1： 文件输入流  表示：从磁盘上将文件使用输入流读取到内存条中
        //参数2： 响应输出流  将内存条中文件写入到网线中 通过网线传送文件到浏览器
        IOUtils.copy(new FileInputStream(path),response.getOutputStream());

    }
}
